/* Copyright 2006, 2007, 2008, 2009, 2010 do SETEC/MEC
 *
 * Este arquivo é parte do programa SigaEPT
 *
 * O SigaEPT é um software livre;  você pode redistribuí-lo e/ou modificá-lo dentro dos
 * termos da Licença Pública Geral GNU como publicada pela fundação do software livre (FSF);
 * na versão 2 da Licença.
 *
 * Este programa é distribuído na esperança que possa ser útil, mas SEM NENHUMA GARANTIA; sem
 * uma garantia implícita de ADEQUAÇÃO a qualquer MERCADO ou APLICAÇÃO EM PARTICULAR. Veja Licença
 * Pública Geral GNU/GPL em português para maiores detalhes.
 *
 * Você deve ter recebido uma cópia da Licença Pública Geral GNU, sob o título “LICENCA.txt”,
 * junto com este programa, se não, acesse o portal do Software Público Brasileiro no endereço
 * www.softwarepublico.gov.br ou escreva para Fundação do Software Livre (FSF) Inc.,51 Franklin
 * St, Fifth Floor, Boston, MA 02110-1301, USA
 */

package br.edu.ifrn.exception;

import java.sql.SQLException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.logging.Logger;

import javax.persistence.PersistenceException;

public class PersistenciaExceptionUtil extends ExceptionUtil {
	
	private static Logger logger = Logger.getLogger(PersistenciaExceptionUtil.class.getSimpleName());
	
	private static Map<String, String> mapa = new HashMap<String, String>();
	
	static{
		/**
		 * De acordo com:
		 * http://db.apache.org/derby/docs/10.1/ref/rrefexcept71493.html
		 */
		mapa.put("23502", "Valor deve ser preenchido");
		//Column '<columnName>' cannot accept a NULL value.
		
		mapa.put("23503", "Contém vinculo");
		/*<value> on table '<tableName>' caused a violation of foreign key constraint '<constraintName>' 
		 * for key <keyName>. The statement has been rolled back.*/
		
		mapa.put("23505", "Campo duplicado");
		/*The statement was aborted because it would have caused a duplicate key value in a unique or
		 * primary key constraint or unique index identified by '<value>' defined on '<value>'.*/ 
		
	}
	
	public static void adicionarErro(PersistenceException persistenceException, List<String> mensagens) {
		SQLException sqlException = (SQLException) persistenceException.getCause().getCause();
		String status = sqlException.getSQLState();
		logger.info(">>> PersistenciaExceptionUtil status "+status);
		mensagens.add(mapa.containsKey(status)?mapa.get(status):sqlException.getMessage());
	}
}
